// //1、结构体定义
// struct Person
// {
//     long no;
//     char name[20];
//     int age;
//     char sex;
//     long indentityNo;
//     char addr[40];
// }student,doctor,worker;


// //结构体定义
// struct 
// {
//     long no;
//     char name[20];
//     int age;
//     char sex;
//     long indentityNo;
//     char addr[40];
// }student,doctor,worker;

// //2、结构体内存对齐
// #include<stdio.h>
// struct S
// {
//     char c1;//1Byte
//     int num;//4Byte
//     char c2;//1Byte
// }s;
// int main()
// {
//     printf("%zd\n",sizeof(s));//6Byte?为什么输出12Byte
//     return 0;
// }


// #include<stdio.h>
// struct temp
// {
//     int number;
//     char name[6];
//     float price;
// };
// int main()
// {
//     struct temp st={0};
//      printf("%zd\n",sizeof(st));
//      printf("%zd\n",sizeof(float));

//     return 0;
// }


// //2、结构体内存对齐
// #include<stdio.h>
// struct S
// {
//     char c1;//1Byte
//     char c2;//1Byte  
//     int num;//4Byte
// }s;
// int main()
// {
//     printf("%zd\n",sizeof(s));
//     return 0;
// }


// //3、结构体成员初始化
// #include<stdio.h>
// struct Person
// {
//     char name[15];
//     int age;
//     char sex;
//     char addr[40];
// }student={"轩辕",25,'男',"重庆"};

// //4、结构体嵌套
// #include<stdio.h>
// struct Data
// {
//     int day;
//     int month;
//     int year;
// };
// struct Person
// {
//     char name[15];
//     struct Data birthday;
//     int age;
//     char sex;
//     char addr[40];
// }student={"张三",23,5,2014,10,'男',"重庆"};


// //4、结构体嵌套
// #include<stdio.h>
// struct Person
// {
//     char name[15];
//     int age;
//     char sex;
//     char addr[40];
// };

// struct Person student1={"轩辕",25,'男',"重庆"};//全局变量

// int main()
// {
//     struct Person student1={"轩辕",25,'男',"重庆"};//局部变量
//     return 0;
// }

// //5、结构体解引用
// #include<stdio.h>
// //创建结构体
// struct Person
// {
//     char name[15];
//     int age;
//     char profession[30];
//     char addr[50];
// };

// int main()
// {
//     //创建结构体变量
//     struct Person student1={"张三",21,"计算机","重庆"};
//     struct Person *worker=&(struct Person){"王岑",26,"软件工程","上海"};
//     //此处不能写为struct Person *worker={"王岑",26,"软件工程","上海"};
//     //因为是指针变量不能直接初始化。
 
//     struct Person *teacher=&(struct Person){"文宇",29,"计算机老师","成都"};

//     printf("姓名\t年龄\t专业\t\t地址\n");
// 	//解引用操作来访问
//     printf("%s\t%d\t%s\t\t%s\n",student1.name,student1.age,student1.profession,student1.addr); 
//     printf("%s\t%d\t%s\t%s\n",(*worker).name,(*worker).age,(*worker).profession,(*worker).addr); 
//     printf("%s\t%d\t%s\t%s\n",teacher->name,teacher->age,teacher->profession,teacher->addr);
//     return 0;
// }


////6、结构体成员使用
// #include<stdio.h>
// //学生成绩信息结构体
// struct score
// {
//     int math;
//     int english;
//     int computer;
// };

// //学生基本信息结构体
// struct stu
// {
//     char name[15];
//     char sex;
//     long stuNo;
//     struct score sub;
// };

// int main()
// {
//     struct stu student1={"张三",'M',20230001,85,76,95};
//     struct stu student2;
//     student2=student1;
    
//     printf("姓名\t性别\t学号\t\t高数\t英语\t计算机\n");
//     printf("%s\t%c\t%d\t%d\t%d\t%d\n",
//     student1.name,student1.sex, student1.stuNo,student1.sub.math,student1.sub.english,student1.sub.computer);

//     printf("%s\t%c\t%d\t%d\t%d\t%d\n",
//     student2.name,student2.sex, student2.stuNo,student2.sub.math,student2.sub.english,student2.sub.computer);
//     return 0;
// }




// //7、结构体数组初始化
// #include<stdio.h>
// struct Person
// {
//     char name[10];
//     int age;
//     char sex;
//     char addr[20];
// };

// int main()
// {
//     struct Person student[30]={{"hang Ming",23,'F',"潮汕"},
//     {"Zhao Chen",25,'M',"成都"},
//     {"Zhou Ting",26,'F',"昆明"}};
//     //student[3]~student[29]是不确定的。

//     printf("姓名\t\t年龄\t性别\t地址\n");
//     for(int i=0;i<3;i++)
//     {
//         printf("%2s\t%2d\t%2c\t%2s\n",student[i].name,student[i].age,student[i].sex,student[i].addr);
//     }
    
//     return 0;
// }


//结构体变量与函数
#include<stdio.h>
//购书信息结构体
struct BookList
{
    char name[20];
    int number;
    float price;
    float SumMoney;
};

//输出函数
void print_book_list(struct BookList book)
{
    book.SumMoney=book.number*book.price;
    printf("%-24s%d\t%.2f\t%.2f\n",book.name,book.number,book.price,book.SumMoney);
}

int main()
{
    //购置的书数量不止一本，所以用结构体数组
    struct BookList Book[4];
    float Total=0;
    printf("请输入这4本书的信息:书名  数量  单价\n");
    for(int i=0;i<4;i++)
    {
        scanf("%s%d%f",&Book[i].name,&Book[i].number,&Book[i].price);
        Total+=Book[i].number*Book[i].price;
    }
    printf("--------------------------------------------\n");
    printf("购置书清单：\n");
    printf("书名\t\t\t数量\t单价\t合计\n");
    for(int i=0;i<4;i++)
    {
        print_book_list(Book[i]);
    }
    printf("购书金额总计：%.2f\n",Total);
    return 0;
}